<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>统一地图平台</title><link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
    <style>
        html,
        body,
        #mapui {
            width: 100%;
            height: 100%;
        }

        html,
        body {
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <div id="mapui"></div>

    <script src="./js_example/script/map.min.js"></script>
    <script src="./js_example/script/demo.js"></script>
    <script src="./js_thematic_map_example/script/jq/jquery.min.js"></script>
    <script>
        var amap = null;
        var that = this;
        var data = [];
        var timeData = [];
        map.Factory.create('mapui', {
            center: [112, 27.94],
            fullExtent: {
                xmin: 90.992204,
                ymin: 10.979711,
                xmax: 120.5338915,
                ymax: 50.543712
            },
            zoom: 5,
            projection: 'EPSG:4326',
            strategy: ['mapboxgl', 'openlayers'],
            style: style
        }, (o) => {
            amap = o;
            amap.pmap.setPitch(60);
            map.Factory.loadSpecialMap('mapv' , () =>{
                that.init(amap);
            })
        });


        function init(map) {

            $.get('./js_thematic_map_example/data/china.json', function (geojson) {

                var geojsonOptions = {
                    gradient: {
                        0: 'rgba(55, 50, 250, 0.4)',
                        1: 'rgba(55, 50, 250, 1)'
                    },
                    max: 354551,
                    draw: 'intensity'
                };

                var geojsonDataSet = special_mapv.geojson.getDataSet(geojson);

                var to = '北京';

                var qianxi = new special_mapv.DataSet([
                    {
                        from: '河北',
                        count: 354551,
                        to: to,
                    },
                    {
                        from: '天津',
                        count: 97323,
                        to: to,
                    },
                    {
                        from: '山东',
                        count: 28664,
                        to: to,
                    },
                    {
                        from: '山西',
                        count: 16650,
                        to: to,
                    },
                    {
                        from: '辽宁',
                        count: 14379,
                        to: to,
                    },
                    {
                        from: '河南',
                        count: 10980,
                        to: to,
                    },
                    {
                        from: '内蒙古自治区',
                        count: 9603,
                        to: to,
                    },
                    {
                        from: '江苏',
                        count: 4536,
                        to: to,
                    },
                    {
                        from: '上海',
                        count: 3556,
                        to: to,
                    },
                    {
                        from: '广东',
                        count: 2600,
                        to: to,
                    },
                ]);

                var qianxiData = qianxi.get();

                var lineData = [];
                var pointData = [];
                var textData = [];
                var timeData = [];

                var citys = {}

                for (var i = 0; i < qianxiData.length; i++) {
                    var fromCenter = special_mapv.utilCityCenter.getCenterByCityName(qianxiData[i].from);
                    var toCenter = special_mapv.utilCityCenter.getCenterByCityName(qianxiData[i].to);
                    if (!fromCenter || !toCenter) {
                        continue;
                    }
                    citys[qianxiData[i].from] = qianxiData[i].count;
                    citys[qianxiData[i].to] = 100;
                    pointData.push(
                        {
                            geometry: {
                                type: 'Point',
                                coordinates: [fromCenter.lng, fromCenter.lat]
                            }
                        }
                    );
                    pointData.push(
                        {
                            geometry: {
                                type: 'Point',
                                coordinates: [toCenter.lng, toCenter.lat]
                            }
                        }
                    );
                    textData.push(
                        {
                            geometry: {
                                type: 'Point',
                                coordinates: [fromCenter.lng, fromCenter.lat]
                            },
                            text: qianxiData[i].from
                        }
                    );
                    textData.push(
                        {
                            geometry: {
                                type: 'Point',
                                coordinates: [toCenter.lng, toCenter.lat]
                            },
                            text: qianxiData[i].to
                        }
                    );

                    var curve = special_mapv.utilCurve.getPoints([fromCenter, toCenter]);

                    for (j = 0; j < curve.length; j++) {
                        timeData.push({
                            geometry: {
                                type: 'Point',
                                coordinates: curve[j]
                            },
                            count: 1,
                            time: j
                        });
                    }

                    lineData.push({
                        geometry: {
                            type: 'LineString',
                            coordinates: curve
                            //coordinates: [[fromCenter.lng, fromCenter.lat], [toCenter.lng, toCenter.lat]]
                        },
                        count: 30 * Math.random()
                    });

                }

                var data = geojsonDataSet.get({
                    filter: function (item) {

                        if (!citys[item.name]) {
                            return false;
                        }

                        item.count = citys[item.name];
                        return true;
                    }
                });
                geojsonDataSet = new special_mapv.DataSet(data);

                var mapvLayer = new special_mapv.FmLayer(map, geojsonDataSet, geojsonOptions);

                var textDataSet = new special_mapv.DataSet(textData);

                var textOptions = {
                    draw: 'text',
                    font: '14px Arial',
                    fillStyle: 'white',
                    shadowColor: 'yellow',
                    shadowBlue: 10,
                    zIndex: 11,
                    shadowBlur: 10
                };

                var mapvLayer = new special_mapv.FmLayer(map, textDataSet, textOptions);

                var lineDataSet = new special_mapv.DataSet(lineData);

                var lineOptions = {
                    strokeStyle: 'rgba(255, 250, 50, 0.8)',
                    shadowColor: 'rgba(255, 250, 50, 1)',
                    shadowBlur: 20,
                    lineWidth: 2,
                    zIndex: 100,
                    draw: 'simple'
                };

                var mapvLayer = new special_mapv.FmLayer(map, lineDataSet, lineOptions);

                var pointOptions = {
                    fillStyle: 'rgba(254,175,3,0.7)',
                    shadowColor: 'rgba(55, 50, 250, 0.5)',
                    shadowBlur: 10,
                    size: 5,
                    zIndex: 10,
                    draw: 'simple'
                };


                var pointDataSet = new special_mapv.DataSet(pointData);

                var mapvLayer = new special_mapv.FmLayer(map, pointDataSet, pointOptions);


                var timeDataSet = new special_mapv.DataSet(timeData);

                var timeOptions = {
                    fillStyle: 'rgba(255, 250, 250, 0.5)',
                    zIndex: 200,
                    size: 2.5,
                    animation: {
                        type: 'time',
                        stepsRange: {
                            start: 0,
                            end: 50
                        },
                        trails: 10,
                        duration: 2,
                    },
                    draw: 'simple'
                };

                var mapvLayer = new special_mapv.FmLayer(map, timeDataSet, timeOptions);

            });
        }


    </script>
</body>

</html>